package com.iiifi.kite.ip2region.core;

import org.springframework.lang.Nullable;

/**
 * ip 搜索器
 *
 * @author dream.lu
 */
public interface Ip2regionSearcher {

    /**
     * 重新加载数据文件
     *
     * @throws Exception Exception
     */
    void reload() throws Exception;

    /**
     * ip 位置 搜索
     *
     * @param ip ip
     * @return 位置
     */
    @Nullable
    IpInfo memorySearch(long ip);

    /**
     * ip 位置 搜索
     *
     * @param ip ip
     * @return 位置
     */
    @Nullable
    IpInfo memorySearch(String ip);

    /**
     * ip 位置 搜索
     *
     * @param ptr ptr
     * @return 位置
     */
    @Nullable
    IpInfo getByIndexPtr(long ptr);

    /**
     * ip 位置 搜索
     *
     * @param ip ip
     * @return 位置
     */
    @Nullable
    IpInfo btreeSearch(long ip);

    /**
     * ip 位置 搜索
     *
     * @param ip ip
     * @return 位置
     */
    @Nullable
    IpInfo btreeSearch(String ip);

    /**
     * ip 位置 搜索
     *
     * @param ip ip
     * @return 位置
     */
    @Nullable
    IpInfo binarySearch(long ip);

    /**
     * ip 位置 搜索
     *
     * @param ip ip
     * @return 位置
     */
    @Nullable
    IpInfo binarySearch(String ip);

}
